package com.theorydance.esoperator.utils;

import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FSUtils {
	
	public static String getNow() {
		return LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
	}
	
	/**
	 * @param regex 正则表达式
	 * @param content 需要匹配的内容
	 * @return
	 */
	public static boolean match(String regex, String content) {
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(content);
		return m.find();
	}
	
	/**
	 * 根据正则表达式，抓取需要的第一个数据
	 * @param content
	 * @param regex
	 * @return
	 */
	public static String capture(String content, String regex) {
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(content);
		return m.find() ? m.group(1) : "";
	}

	/**
	 * 得到文档内容的md5信息，参考博客：https://blog.csdn.net/qq_25646191/article/details/78863110
	 * @param file 文件
	 * @return 对应文件的MD5字符串
	 */
	public static String getMd5(File file) {
		try {  
			FileInputStream fis = new FileInputStream(file);
        	//拿到一个MD5转换器,如果想使用SHA-1或SHA-256，则传入SHA-1,SHA-256  
            MessageDigest md = MessageDigest.getInstance("MD5"); 
            
            //分多次将一个文件读入，对于大型文件而言，比较推荐这种方式，占用内存比较少。
            byte[] buffer = new byte[1024];  
            int length = -1;  
            while ((length = fis.read(buffer, 0, 1024)) != -1) {  
                md.update(buffer, 0, length);  
            }  
            fis.close();
            //转换并返回包含16个元素字节数组,返回数值范围为-128到127
  			byte[] md5Bytes  = md.digest();
            BigInteger bigInt = new BigInteger(1, md5Bytes);//1代表绝对值 
            return bigInt.toString(16);//转换为16进制
        } catch (Exception e) {  
            e.printStackTrace();  
            return "";  
        }
	}
}
